package org.pps.gl.server.datastore;

import java.util.ArrayList;
import java.util.List;
import com.google.appengine.api.datastore.Entity;

/**
 * Cette classe prend en charge toutes les operations en rapport avec l'entitée
 * Entreprise.
 * 
 * Une Entreprise a les propriétés suivantes : - emailUser - nom (de
 * l'entreprise)
 * 
 */
public class Entreprise {

	/**
	 * Créer une nouvelle entité Entreprise associée à une expérience
	 * professionnelle.
	 * 
	 * @param experience
	 *            : Expérience professionnelle concernée de l'utilisateur.
	 * @param emailUser
	 *            : email de l'utilisateur concerné.
	 * @param nom
	 *            : String représentant le statut de l'utilisateur.
	 * @return la nouvelle entité créée.
	 */
	public static Entity createEntreprise(Entity experience, String emailUser,
			String nom) {

		if (experience != null) {
			Entity entreprise;
			entreprise = new Entity("Entreprise", experience.getKey());
			entreprise.setProperty("email_user", emailUser);
			entreprise.setProperty("nom", nom);
			Util.persistEntity(entreprise);
			return entreprise;
		} else
			return null;
	}

	/**
	 * Méthode qui permet la mise à jour d'une propriété d'une entité
	 * Entreprise.
	 * 
	 * @param entreprise
	 * @param property
	 * @param value
	 */
	public static void updateEcole(Entity entreprise, String property,
			String value) {

		// Mise à jour de la propriété
		entreprise.setProperty(property, value);
		Util.persistEntity(entreprise);
	}

	/**
	 * Récupère l'entreprise correspondant à une experience.
	 * 
	 * @param etude
	 *            : experience correspondant
	 * @return: Entreprise entity.
	 */
	public static Entity getEntreprise(Entity experience) {
		return Util.listChildren("Entreprise", experience.getKey()).iterator()
				.next();
	}

	/**
	 * Récupère les écoles correspondantes a l'email d'un user.
	 * 
	 * @param emailUser
	 *            : email d'un user
	 * @return profil entity
	 */
	public static Iterable<Entity> getEntreprise(String emailUser) {
		return Util.listEntities("Entreprise", "email_user", emailUser);
	}

	/**
	 * Méthode qui retourne une liste de toutes les entreprises existantes dans
	 * le datastore.
	 * 
	 * @return List<String> de toutes les entreprises existantes.
	 */
	public static List<String> getAllEntreprise() {

		List<String> ret = new ArrayList<String>();
		Iterable<Entity> results = Util.listEntities("Entreprise", null, null);

		for (Entity e : results) {
			if (!ret.contains(e.getProperty("nom").toString()))
				ret.add(e.getProperty("nom").toString());
		}

		return ret;
	}

	/**
	 * Efface l'entreprise d'un utilisateur.
	 * 
	 * @param entity
	 *            : Entité entreprise à effacer.
	 */
	public static String deleteEntreprise(Entity entity) {
		if (entity != null) {
			Util.deleteEntity(entity.getKey());
			return ("Entreprise deleted successfully.");
		} else
			return ("Entreprise not found");
	}

	public static String getNomEntreprise(Entity entreprise) {
		return (String) entreprise.getProperty("nom");
	}

}
